Problem
Time limit : 2sec / Memory limit : 256MB
题意简述:
给你一个有向图。 如果$x \rightarrow y, y \rightarrow z$,加上$z \rightarrow x$。 重复该过程直到不能再添加,求最终图中有多少边。
Solution
把方格$(i,j)$想象为一条边$i \rightarrow j $。
那么对于输入,可以得到一张有向图。
考虑用三种颜色给原图每个联通块染色。
令这三种颜色分别为$0,1,2$,且$0 \rightarrow 1 \rightarrow 2 \rightarrow 0$。
可以发现题目中的染色方法便是这张图上,若某个$0\rightarrow 1$且$1\rightarrow2$,则产生$2\rightarrow 0$的边。
那么在染色后,分为三种情况:
- 如果染色成功了,那么当前联通块对答案的贡献便是:所有$0$向$1$连边,所有$1$向$2$连边,所有$2$向$1$连边的总边数
- 如果不成功但是用了每种颜色,画图可知一定是出现了环(包括自环),于是这个联通块可以被连成一个完全图
- 如果不成功也没有使用每一种颜色,那么这个联通块的贡献就是输入的边
Code:
1 |
|